package com.集合.Collections类.案例;
/*案例：ArrayList存储学生对象并排序
需求：ArrayList存储学生对象，使用Collections对ArrayList进行排序
要求：按照年龄从小到大排序，年龄相同时，按照姓名的字母顺序排序思路：
① 定义学生类
② 创建ArrayList集合对象
③ 创建学生对象
④ 把学生添加到集合
⑤ 使用Collections对ArrayList集合排序
⑥ 遍历集合*/
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

class Student{
    private String name;
    private int age;

    public Student(){}
    public Student(String name,int age){
        this.name=name;
        this.age=age;
    }

    public void setName(String name){
        this.name=name;
    }
    public String getName(){
        return name;
    }
    public void setAge(int age){
        this.age=age;
    }
    public int getAge(){
        return age;
    }
}
public class ArrayListDemo {
    public static void main(String[] args) {
        ArrayList<Student> al = new ArrayList<Student>();

        Student s1 = new Student("lisa",20);
        Student s2 = new Student("jack",21);
        Student s3= new Student("tom",22);
        Student s4 = new Student("jerry",23);
        Student s5 = new Student("liming",23);

        al.add(s1);
        al.add(s2);
        al.add(s3);
        al.add(s4);
        al.add(s5);

        /*  sort(List<T> list) 根据其元素的natural ordering对指定的列表进行排序。
        * 而进行排序的学生类对象并没有实现自然排序故报错*/
//        Collections.sort(al);

        //sort(List<T> list, Comparator<? super T> c)
        //根据指定的比较器引起的顺序对指定的列表进行排序。
        //采用匿名内部类实现
        Collections.sort(al, new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                int num = s1.getAge()-s2.getAge();
                int num2 = num==0?s1.getName().compareTo(s2.getName()):num;
                return num2;
            }
        });

        for(Student s:al){
            System.out.println(s.getName()+","+s.getAge());
        }
    }
}
